package crack;

import javassist.ClassPool;
import javassist.CtClass;
import javassist.CtMethod;

/**
 * @author hujian
 * @date 2023/3/11 14:15
 * @description
 */
public class CrackClassByte {

    /**
     * 修改words jar包里面的校验
     */
    public static void modifyWordsJar() {
        try {
            //这一步是完整的jar包路径,选择自己解压的jar目录
            ClassPool.getDefault().insertClassPath("D:\\Installment\\apache-maven-3.6.3\\repository\\com\\aspose\\aspose-words\\23.2\\aspose-words-23.2-jdk17.jar");
            //获取指定的class文件对象
            CtClass zzZJJClass = ClassPool.getDefault().getCtClass("com.aspose.words.zzKH");
            //从class对象中解析获取指定的方法
            CtMethod[] methodA = zzZJJClass.getDeclaredMethods("zzYEV");
            //遍历重载的方法
            for (CtMethod ctMethod : methodA) {
                CtClass[] ps = ctMethod.getParameterTypes();
                if (ctMethod.getName().equals("zzYEV") && ps[0].getName().equals("java.io.InputStream")) {
                    System.out.println("ps[0].getName==" + ps[0].getName());
                    //替换指定方法的方法体
                    ctMethod.setBody("{this.zzY2p= new java.util.Date(Long.MAX_VALUE);this.zzXDf = com.aspose.words.zzYiF.zzZik;zzVQN = this;}");
                }
            }
            //这一步就是将破译完的代码放在桌面上
            zzZJJClass.writeFile("C:\\Users\\40138\\Desktop\\");

            //获取指定的class文件对象
            CtClass zzZJJClassB = ClassPool.getDefault().getCtClass("com.aspose.words.zzM9");
            //从class对象中解析获取指定的方法
            CtMethod methodB = zzZJJClassB.getDeclaredMethod("zzXLz");
            //替换指定方法的方法体
            methodB.setBody("{return 256;}");
            //这一步就是将破译完的代码放在桌面上
            zzZJJClassB.writeFile("C:\\Users\\40138\\Desktop\\");
        } catch (Exception e) {
            System.out.println("错误==" + e);
        }
    }

    public static void main(String[] args) {
        modifyWordsJar();
    }
}
